Selamat datang di Bab 5! Setelah menguasai dasar PHP, kini saatnya membangun aplikasi web dinamis & aman — mengingat pengguna, memproses form, mengunggah file, dan mengamankan password.
Di akhir bab ini, kamu mampu membangun sistem login PHP native yang aman dari nol.
Daripada menulis menu & footer di setiap halaman, simpan sekali lalu sisipkan ke banyak file. Hover kartu untuk melihat bedanya.
<?php include 'header.php'; // opsional require 'koneksi.php'; // wajib?> <h1>Konten Halaman Utama</h1><?php include 'footer.php'; ?>
File tidak ditemukan → muncul Warning, tapi program tetap lanjut.
Cocok untuk bagian opsional (menu, iklan).
hover / klik untuk balik ↻File tidak ditemukan → muncul Fatal Error, program berhenti.
Cocok untuk file wajib (koneksi database).
hover / klik untuk balik ↻include_once & require_once agar file tidak tersisip dua kali.HTTP itu "pelupa". Session membuat server mengingat siapa yang sedang login. Datanya disimpan di sisi server.
<?php session_start(); // mulai sesi $_SESSION['nama'] = 'Budi'; // simpan echo $_SESSION['nama']; // ambil session_destroy(); // hapus saat logout?>
session_start() → muncul error "headers already sent".Ikuti perjalanan sebuah sesi — dari request pertama sampai dihancurkan saat logout.
Berbeda dengan session, cookie disimpan di komputer pengguna dan punya masa kedaluwarsa. Perhatikan 4 fase siklusnya.
<?php // dibuat, berlaku 1 jam setcookie('tema', 'gelap', time()+3600); // dibaca echo $_COOKIE['tema']; // dihapus (expire ke masa lalu) setcookie('tema', '', time()-3600);?>
Dua metode mengirim data form ke server. Pilih sesuai kebutuhan: tampil di URL atau tersembunyi di body.
| Aspek | GET | POST |
|---|---|---|
| Lokasi data | Di URL | Di body |
| Terlihat? | Ya, tampak | Tidak tampak |
| Kapasitas | Kecil (~2KB) | Besar |
| Keamanan | Rendah | Lebih aman |
| Cocok untuk | Pencarian, filter | Login, simpan data |
<!-- GET: data tampil di URL --> <form method="get"> <input name="cari"> </form> // url?cari=php → $_GET['cari']<!-- POST: data tersembunyi --> <form method="post"> <input name="password"> </form> // $_POST['password']
Menerima data dari form, lalu mengolahnya di server. Pola intinya: cek metode → ambil data → bersihkan → tampilkan hasil.
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { $nama = trim($_POST['nama']); if (empty($nama)) { echo "Nama wajib diisi!"; } else { echo "Halo, " . htmlspecialchars($nama); } }?>
Jika data salah, alur "memantul" kembali ke pengguna untuk diperbaiki. Hanya data valid yang diproses.
Menerima file dari browser membutuhkan enctype="multipart/form-data" dan superglobal $_FILES.
<form method="post" enctype="multipart/form-data"> <input type="file" name="foto"> <button>Upload</button></form><?php $tmp = $_FILES['foto']['tmp_name']; $nama = $_FILES['foto']['name']; move_uploaded_file($tmp, "uploads/".$nama);?>
Memastikan data bersih & benar sebelum diproses. Kumpulkan semua error dalam satu array agar pengguna tahu apa yang salah.
<?php $err = []; $nama = trim($_POST['nama']); $email = trim($_POST['email']); $umur = $_POST['umur']; if (empty($nama)) $err[]="Nama wajib"; if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $err[]="Email tidak valid"; if (!is_numeric($umur)) $err[]="Umur harus angka"; echo empty($err) ? "Data valid ✅" : implode(", ", $err);?>
Password tidak pernah disimpan apa adanya. Ia diubah menjadi hash — kode acak satu arah yang tak bisa dikembalikan.
<?php // saat registrasi → buat hash $hash = password_hash('rahasia123', PASSWORD_DEFAULT); // saat login → cocokkan if (password_verify($input, $hash)) echo "Password benar ✅"; else echo "Password salah ❌";?>
password_hash().Menggabungkan POST + validasi + password_verify + session menjadi sistem login utuh.
<?php session_start(); $user = trim($_POST['username']); $pass = $_POST['password']; // ambil hash user dari database if (password_verify($pass, $hashDb)) { $_SESSION['login'] = $user; header("Location: dashboard.php"); } else { echo "Username / password salah"; }?>
Inilah keputusan "berhasil atau gagal" — jantung dari setiap sistem login.
Peta file yang akan kamu bangun. Setiap file punya satu tugas jelas — inilah modularitas yang dipelajari di awal bab.
Form input + password_verify() + membuat session.
Daftar user baru + password_hash() sebelum simpan ke database.
Cek $_SESSION. Jika kosong → tendang ke login.
session_destroy() lalu redirect ke halaman login.
koneksi.php dipanggil dengan require di setiap halaman yang butuh database.Latih modularitas file sekaligus manajemen sesi pengguna.
header.php, footer.php, dan index.php.include untuk memasukkan header & footer ke dalam index.session_start() dan simpan nama pengguna di $_SESSION.💡 Hint: Letakkan session_start() di baris paling atas, sebelum output HTML apa pun.
Gabungkan POST + validasi untuk memproses input dengan aman.
nama, email, umur.$_POST.FILTER_VALIDATE_EMAIL), umur harus angka.💡 Hint: Gunakan array $err = [] untuk menampung semua pesan kesalahan sekaligus.
Bangun sistem login lengkap menggunakan PHP native. Terapkan SEMUA konsep Bab 5.
password_hash().password_verify() & kelola session.session_destroy().🎉 Selamat! Kamu telah menyelesaikan Bab 5 — PHP Lanjutan. Aplikasi web dinamis & aman pertamamu siap dibangun!